Skip to content

将所有的信息封装在构造函数中,并且在第一次调用构造函数的时候初始化原型,从而避免了将方法定义在构造函数内部,这使得构造函数模式和原型模式结合得更加紧密。

动态原型模式 (推荐 Es6,过时禁止使用的)

js
function Person(name, age) {
  this.name = name;
  this.age = age;

  if (typeof this.sayHello !== "function") {
    Person.prototype.sayHello = function () {
      console.log(
        "Hello, my name is " +
          this.name +
          " and I am " +
          this.age +
          " years old."
      );
    };
  }
}

let person1 = new Person("John", 30);
let person2 = new Person("Alice", 25);

person1.sayHello(); // 输出:Hello, my name is John and I am 30 years old.
person2.sayHello(); // 输出:Hello, my name is Alice and I am 25 years old.

缺点

  • 对象的构造过程不够清晰,可能会导致代码难以理解和维护。
  • 对象的方法是在第一次调用构造函数时才会被初始化,这可能会导致初始化延迟和不确定性。